package inge_soft.gestoriusNuevo.business.controller.validation;

import inge_soft.gestoriusNuevo.persistence.entity.implementation.Categoria;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Institucion;

import java.util.Date;
import java.util.Map;

import org.zkoss.bind.Property;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

public class ValidadorActividad extends AbstractValidator {

	public void validate(ValidationContext ctx) {

		Map<String, Property> beanProps = ctx.getProperties(ctx.getProperty()
				.getBase());
		System.out.println("Properties: " + beanProps.toString());
		validarVacios(ctx, (String) beanProps.get("nombre").getValue(),
				(String) beanProps.get("descripcion").getValue(),
				(String) beanProps.get("docente").getValue(),
				(String) beanProps.get("temario").getValue(), (Date) beanProps
						.get("fechaInicio").getValue(),
				(Date) beanProps.get("fechaFin").getValue());
		try {
			validarCupoNumerico(ctx, (Integer) beanProps.get("cupo").getValue());
		} catch (NumberFormatException ex) {
			this.addInvalidMessage(ctx, "cupo", "El cupo debe ser numerico");
		}
		validarFechas(ctx, (Date) beanProps.get("fechaInicio").getValue(),
				(Date) beanProps.get("fechaFin").getValue());
	}

	private void validarCupoNumerico(ValidationContext ctx, Integer cupo) {
		if (cupo == null) {// Si tiene algo");
			return;
		} else {
			if (cupo <= 0) {
				this.addInvalidMessage(ctx, "cupo",
						"El cupo debe ser mayor a 0");
			}
		}
	}

	public Integer isStringInt(String s) { // Verifica que sea entero, si es
											// entero devuelve el valor, de lo
											// contrario, devuelve null
		try {
			return Integer.parseInt(s);
		} catch (NumberFormatException ex) {
			return null;
		}
	}

	private void validarVacios(ValidationContext ctx, String nombre,
			String descripcion, String docente, String temario, Date fi, Date ff) {
		if (descripcion == null || docente == null || temario == null
				|| fi == null || ff == null || nombre == null) {

			this.addInvalidMessage(ctx, "nombre",
					"Se deben ingresar todos los campos obligatorios [*]");

		}
		return;
	}

	private void validarFechas(ValidationContext ctx, Date fechaInicio,
			Date fechaFin) {
		if (fechaInicio == null || fechaFin == null) {
			this.addInvalidMessage(ctx, "fechas", "Debe ingresar ambas fechas");
			return;
		}
		if (fechaFin.compareTo(fechaInicio) <= 0) {
			this.addInvalidMessage(ctx, "fechas",
					"La fecha de fin no puedo ser anterior a la de inicio");
		}

	}

}
